MARK-I Az angol sz mĄt stechnika akkor kapott Łjabb lendletet, mikor a m sodik vil gh borŁ befejezt‚vel a n‚met r di˘ad sok megfejt‚s‚n dolgoz˘ szakemberek b‚k‚sebb munka ut n n‚ztek. (A rejtjelek megfejt‚s‚re t”bb g‚pet is k‚szĄtettek a h borŁ alatt, ezeket azonban kifejezetten k˘dfelt”r‚sre tervezt‚k. R‚szletes m–szaki leĄr suk ma is titkos, Ągy nem lehet pontosan megmondani, mennyire illik r  ezekre a masin kra a "sz mĄt˘g‚p" n‚v. Az azonban val˘szĄn–, hogy e kutat s kapcs n szerzett tapasztalatoknak haszn t vett‚k az els“ sz mĄt˘g‚pek tervez‚s‚n‚l.) K‚t egykori "k˘dfelt”r“", n‚v szerint F. C. Wiliams ‚s T. Killbrun a Manchesteri Egyetemen kaptak  ll st, ahol idejket egy elektronikus sz mĄt˘g‚p ”sszet kol s val t”lt”tt‚k. Val˘ban "t kol sr˘l" volt sz˘, nem vesztegett‚k az id“t a precĄz munk ra, ami azt n meg is l tszott a megbĄzhat˘s gon. (A g‚p alig p r ˘r t m–k”d”tt hiba n‚lkl: az zemeltet‚si napl˘ szerint a folyamatos hib tlan m–k”d‚s rekorja kilenc ˘ra volt.) [Image] A g‚pen 1948 jŁnius 21.-‚n sikerrel futtatt k le a vil g els“ programj t. A sikert“l b torĄtva a g‚pet tov bbfejlesztett‚k ‚s hamarosan elk‚szlt a nagyobb t rkapacit sŁ, MARK I n‚vre keresztelt sz mĄt˘g‚p. A MARK I minden l‚nyeges alapevet ‚s szerkezeti elemet tartalmazott, amelyek a mai sz mĄt˘g‚pek alapj t k‚pezik. A sz mokat bin risan  br zolt k, b r manaps g szok sossal ‚ppen ellent‚tes m˘don. (A legkisebb helyi‚rt‚k– bit a bal sz‚ls“.) A teljes mem˘riakapacit s 256 sz˘, a sz˘hosszŁs g 40 bit volt. (Kiv‚tel az akkumul tor, ami 80 bites.) A CPU teljes eg‚sz‚ben elektroncs”vekb“l (t”bb mint n‚gyezer darab tri˘d kb˘l ‚s pent˘d kb˘l) ‚plt fel, 25 kW teljesĄtm‚nyt fogyasztva. Mem˘riak‚nt un. Williams-cs”veket haszn ltak. Ez a TV k‚perny“j‚hez hasonl˘ foszforral bevont kat˘dsug rcs“: az elektonsug rral villamos t”lt‚st lehet l‚trehozni a foszforr‚tegben, amit ugyancsak az elektronsug r segĄts‚g‚vel ki lehet olvasni. B rmikor b rmelyik pontot olvashatjuk vagy Ąrhatjuk, teh t a szerkezet RAM-k‚nt haszn lhat˘. Mivel a t”lt‚s elsziv rog, a beĄrt inform ci˘t bizonyos id“k”z”nk‚nt frissĄteni kell. A Williams cs”vet ‚ppen az tette alkalmass  adatt rol sra, hogy tervez“j‚nek sikerlt viszonylag egyszer– ‚s megbĄzhat˘ m˘dszert kital lnia a frissĄt‚sre. Az adatokat t rol˘ pontok a foszfor bevonat miatt vil gĄtottak, Ągy szabad szemmel is le lehetett olvasni a cs“be beĄrt adatokat. A MARK I-ben haszn lt Williams cs”vek 32 darab negyven bites sz˘t t roltak. Ha figyelmesen szemgyre vesszk a MARK I egyik Williams cs”v‚nek f‚nyk‚p‚t, akkor a 32 darab teljes hosszŁs gŁ sz˘ mellett a k‚perny“ tetej‚n l tunk m‚g egy 20 bites sz˘t is. Ez a 20 bit a vil g els“ "page address"-e. A cs”vek tartalm t ugyanis el lehetett menteni egy m gnesdobos “s-winchesterre, ‚s ez a cĄm mondta meg, hogy a m solat a m gnesdob melyik s vj ban van. Ebb“l n“tt ki azt n a virtu lis cĄmz‚s ‚s a "memory swapping". A g‚ppel egy 5 bites lyukszalag olvas˘n, vagy a m‚rn”ki pulton keresztl lehetett t rgyalni (ez ut˘bbi 20 db kapcsol˘b˘l  llt, amit a g‚p egy utasĄt ssal le tud olvasni). Kimeneti eszk”zk‚nt egy szalaglyukaszt˘ ‚s egy nyomtat˘ szolg lt. Manchesteri l togat sa sor n a MARK I annyira leny–g”zte a korm ny egyik tudom nyos tan csad˘j t, hogy p r nap alatt tet“ al  hozott egy  llamilag t mogatott programot, amelynek keret‚ben a Ferranti Ltd. v llalat gy rtani kezdte a g‚pet. Ezzel a MARK I lett a vil g els“ sorozatban gy rtott, kereskedelmi forgalomba hozott elektronikus sz mĄt˘g‚pe. (Nagy zlet nem lehetett, hat ‚v alatt kilenc darabot adtak el bel“le.) Az els“ Ferranti MARK I-et a Manchesteri Egyetemen helyezet‚k zembe, ‚s mivel a g‚p teljesĄtm‚nye meghaladta az egyetem sz mĄt si ig‚nyeit, kls“ felhaszn l˘k sz m ra is v‚geztek sz mĄt sokat. Egy Dr. Glennie p‚ld ul az atombomb k t”k‚letesĄt‚s‚hez szks‚ges sz mĄt sokat v‚gzett a MARK I-en, term‚szetesen a legnagyobb titokban. (Munka ut n m‚g a nyomtat˘ fest‚kszalagj t is el kellett ‚getnie.) Akkoriban m‚g egyetlen programoz si nyelv sem l‚tezett, az assembly "fordĄt st" maga a programoz˘ v‚gezte Łgy, hogy az utasĄt sok bin ris k˘djainak megfelel“ ASCII karaktereket beg‚pelte egy konzolĄr˘g‚pen. Ezt a m˘dszert Alan Turing vezette be, aki a h borŁ idej‚n v‚gtelen ˘r kat t”lt”tt el a rejtjelezett n‚met r di˘zenetek ”t bites k˘djainak bogar sz s val, Ągy val˘szĄn–leg fel sem t–nt neki, hogy sz mĄt˘g‚pe utasĄt sait csupa k”nnyen megjegyezhet“ n‚ven hĄvj k mint: T/, /N, T:, stb. A felhaszn l˘k azonban aligha lehettek ilyen bens“s‚ges viszonban az ASCII k˘dt bl val, Ągy az egyik kl”n”sen sokat sz mol˘ user (t”rt‚netesen a m r emlĄtett atombomba-sz mĄt sokat v‚gz“ Dr. Glennie) 1954-ben saj t szak ll ra elk‚szĄtette a MARK I els“ assembler fordĄt˘j t. Ezt k”vette k‚t ‚vvel k‚s“bb R. A. Brooker "autocode" nev– nyelve, amely m r minden felhaszn l˘ sz m ra rendelkez‚sre  llt. A MARK I g‚pet t”bb ezer ˘ra hasznos ‚s haszontalan sz mĄt s ut n v‚gl 1959-ben bontott k le. (TŁls gosan magas volt az egyetem villanysz ml ja :-) Id“k”zben sokkal kisebb fogyaszt sŁ, nagyobb teljesĄtm‚ny– ‚s olcs˘bb g‚peket ‚pĄtettek, Ągy a g‚p nyolc ‚v alatt teljesen elavultt  v lt. A MARK I-et term‚szetesen komoly matematikai sz mĄt sokra haszn lt k, de az akkor m‚g rendkĄv– ‚rt‚kes g‚pid“t m r akkoriban elkezdt‚k j t‚kprogramok fejleszt‚s‚re haszn lni. P‚ldak‚nt Ąme itt egy angol nyevl– szerelmeslev‚l, amit a MARK I-en fut˘ program "Ąrt", a g‚p v‚letlensz m gener tor nak segĄts‚g‚vel v logatva ”ssze a kifejez‚seket. (Csapnival˘an rossz szerelmeslev‚l Ąr˘ vagyok, ez‚rt meg sem kĄs‚rlem lefordĄtani): Darling Sweethart, You are my avid fellow feeling. My affection curiously clings to your passionate wish. My liging yearns to your hart. You are my wistful symphaty: my tender liking. Yours beautifully, Manchester University Computer ------------------------------------------------------------------------------- A vil g els“ programja Az itt l that˘ programot tartj k (az eredeti k‚ziraton feltntetett d tum alapj n) a vil g legels“ elektronikus sz mĄt˘g‚pre Ąrt programj nak. A program 1948. jŁnius 21.-‚n produk lt el“sz”r haszn lhat˘ eredm‚nyt, amihez pontosan 52 percre volt szks‚ge. Az algoritmus egy sz m (a) legnagyobb oszt˘j t keresi meg Łgy, hogy egy megadott kezd“‚rt‚kt“l (b) indulva megvizsg lja, hogy a oszthat˘-e b-vel. Ha nem, akkor b ‚rt‚k‚t eggyel cs”kkenti ‚s Łjra pr˘b lkozik. (Az oszthat˘s g vizsg lata Łgy t”rt‚nik, hogy b ‚rt‚k‚t egy ciklusban levonjuk az a-b˘l ‚s megn‚zzk, hogy a marad‚k nagyobb-e null n l.) Az a sz m a 23-as, a b kezd“‚rt‚k pedig a 24-es mem˘riasz˘bam tal lhat˘. A 20, 21 ‚s 22 szavak a program konstansait t rolj k. C jelenti az akkumul tort, cl pedig a programsz ml l˘t. A test utasĄt s kihagyja a soron k”vetkez“ utasĄt st, ha az akkumul tor tartalma negatĄv. no operation C 25 26 27 1 -24 to C -b 2 C to 26 -b 3 -26 to C b 4 C to 27 -b b 5 -23 to C a r(n-1) -b(n) b(n) 6 sub 27 a - b(n) 7 test 8 add 20 to cl 9 sub 26 r(n) 10 C to 25 r(n) 11 -25 to C 12 test 13 stop 0 0 -b(N) b(N) 14 -26 to C b(n) r(n) -b(n) b(n) 15 sub 21 b(n)-1 16 C to 27 b(n+1) b(n+1) 17 -27 to C -b(n+1) 18 C to 26 -b(n+1) 19 22 to cl r(n) -b(n+1) b(n+1) 20 -3 22 1 22 4 23 -a 24 b initfinal 25 - r(N) (=0) 26 - -b(N) 27 - b(N) rdemes megfigyelni, hogy a programoz˘nak milyen trkk”ket kellett bevetnie, hogy a szeg‚nyes utasĄt sk‚szlettel meg tudja oldani a feladatot. A program a 13. sorban  ll le, a 12. sorban l‚v“ test utasĄt s miatt akkor kerl ide a vez‚rl‚s, ha az akkumul torban nulla, vagy ann l nagyobb sz m van. Az algoritmusb˘l azonban k”vetkezik, hogy ezen a ponton az akkumul tor tartalma csak nulla vagy negatĄv sz m lehet - teh t a progam csak akkor ‚r v‚get, ha az akkumul tor tartalma (vagyis az oszt s marad‚ka) z‚rus. A MARK I utasĄt sk‚szlete A g‚p utasĄt sai 20 bitesek, ebb“l az els“ tĄz bit cĄm, h rom bit a nyolc darab "B-line" (index regiszter) kiv laszt s ra szolg l, egy bit nem haszn lt, a marad‚k hat pedig az utasĄt s k˘dj t adja meg. A list ban haszn lt r”vidĄt‚sek jelent‚se a k”vetkez“: ACC akkumul tor (80 bites) AM az akkumul tor fels“ negyven bitje AL az akkumul tor als˘ negyven bitje S az utasĄt s cĄm r‚sz‚vel megcĄmzett mem˘riasz˘ (store line) tartalma. Az indexregiszterekre kiadott utasĄt sok csak a 20 legkisebb helyi‚rt‚k– bitet haszn lj k, a vez‚rl‚s tad˘ utasĄt sok pedig csak a 10 legkisebb helyi‚rt‚k– bitet. B egy B-line (indexregiszter) tartalma H a m‚rn”ki pult 20 kapcsol˘j n be llĄtott bin ris sz m LDA load AL (AM cleared) LDAS load AL, sign extended into AM LDN load AL negatively STA store AL STM store AM STMC store AM and clear AM SWAP interchange AM and AL STAM store AL, move AM to AL and clear AM STAC store AL and clear ACC CLR clear ACC ADD ACC := ACC + S (signed S) ADDU ACC := ACC + S (unsigned S) SUB ACC := S (signed S) ADDM AM := AM + S LDDU load D (unsigned multiplicant) LDDS load D (signed multiplicant) MADU ACC := ACC + D x S (unsigned S) MADS ACC := ACC + D x S (signed S) MSBU ACC := ACC - D x S (usigned S) MSBS ACC := ACC - D x S (signed S) AND ACC := ACC AND S (S sign extended) ORA ACC := ACC OR S (S sign extended) NEQ ACC := ACC XOR S (S sign extended) SHLS ACC := 2 x S (arithmetic shift) ORS S := AL OR S, := AL ORSC S := AL OR S, then clear ACC LDB load specified B-line STB store specfied B-line SUBB B := B - S LDBX load B-line (without modification) STBX store B-line (without modification) SBBX B := B - S (without modification) JMPA absolute indirect unconditional jump JMPR relative indirect unconditional jump JGEA if ACC positive, absolute indirect jump JGER if ACC positive, relative indirect jump JGBA if (last-named B-line positive), absolute indirect jump JGBR if (last-named B-line positive), relative indirect jump IOTH I/O transfer using H as control word IOTS I/O transfer using S as control word NORM add to AM the position of the most significant one in S SADD add to AM the number of 1st in S - population count RNDM load a random number into AL LDAD load a page address word into AL DST1 debugging stop (1) DST2 debugging stop (2) TIME S := clock HOOT pulse the console hooter STH S := console handswitches H NULL no operation